package com.clouddo.common.vo;
import com.clouddo.common.constants.StatusCode;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @classDesc: 功能描述:(通用json返回结果包装类)
 * @author: xinjinlong
 * @date: 2018/12/16 11:50
 * @copyright (C), 2015-2018, 辰森世纪
 * @email: xjl@choicesoft.com.cn
 */
@Data
@Accessors(chain = true)
public class JsonResult<T> implements Serializable {

    /**
     * 是否成功的标识
     */
    private boolean success;

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 提示信息
     */
    private String message;

    /**
     * 业务数据
     */
    private T data;

    /**
     * 获取成功的Result
     * @return
     */
    public static JsonResult getSuccessResult(){
        return new JsonResult().setSuccess(true)
                .setCode(StatusCode.OK.getCode())
                .setMessage(StatusCode.OK.getInfo());
    }

    /**
     * 返回带返回数据的消息体
     * @return 消息结果体
     */
    public static <T> JsonResult getSuccessResult(T data) {
        JsonResult result = getSuccessResult();
        result.setData(data);
        return result;
    }

    /**
     * 返回默认业务错误
     * @return 错误消息体
     */
    public static JsonResult getErrorResult(StatusCode code) {
        return new JsonResult().setSuccess(false)
                .setCode(code.getCode())
                .setMessage(code.getInfo());
    }

    /**
     * 返回默认业务错误
     * @return 错误消息体
     */
    public static JsonResult getErrorResult() {
        return new JsonResult().setSuccess(false)
                .setCode(StatusCode.ERROR.getCode())
                .setMessage(StatusCode.ERROR.getInfo());
    }

    /**
     *  返回指定错误信息的业务错误
     * @param message 错误信息
     * @return 错误消息体
     */
    public static JsonResult getErrorResult(String message) {
        JsonResult result = getErrorResult();
        result.setMessage(message);
        return result;
    }
    /**
     *  返回指定错误码，错误信息体的业务错误
     * @param code 错误码
     * @param message 错误信息
     * @return 错误消息体
     */
    public static JsonResult getErrorResult(Integer code, String message) {
        JsonResult result = getErrorResult(message);
        result.setCode(code);
        return result;
    }
}
